package com.ht.api.call.func.impl.transfer;

import javax.sql.DataSource;

import com.ht.api.bean.AjaxResult;
import com.ht.api.bean.LoginBean;
import com.ht.api.call.func.IFunctionCall;
import com.ht.api.db.Db;
import com.ht.api.db.Entity;
import com.ht.api.db.exception.HtException;
import com.ht.api.db.task.HtTaskExecutor;
import com.ht.api.db.task.Plan;
import com.ht.api.task.TransferStartTask;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

/**
 * 启动客户接替
 * @author asq
 * @createTime 2025年3月9日 09:11:00
 */
public class TransferStartFunctionCall implements IFunctionCall {

	@Override
	public String getName() {
		return "启动客户接替";
	}

	@Override
	public JSONObject execute(LoginBean me, JSONObject param, AjaxResult result) {
		// 获取登陆用户的数据源
		DataSource ds = me.getDataSource();
		
		// 验证参数
		checkParam(param);
		
		// 查询客服接替任务，变更客服接替表的接替任务状态
		String mainId = param.getStr("main_id");
		Entity wxTransferUser = Db.createSqlParser("wx_transfer_user").findById(ds, mainId);
		if (wxTransferUser == null) {
			throw new HtException("main_id不存在：" + mainId);
		}
		Entity wxTransferUserUpdate = Entity.create("wx_transfer_user");
		wxTransferUserUpdate.setMainId(mainId);
		wxTransferUserUpdate.set("status", 1); // 等待继承
		Db.insert(me.getDataSource(), wxTransferUserUpdate);
		
		// 启动定时任务，在指定的“继承时间”处执行
		param.set("tenant_id", me.getTenantIdStr());
		Plan plan = Plan.create().at(wxTransferUser.getStr("transfer_time"));
		HtTaskExecutor.submitTask(param, new TransferStartTask(), plan);
		
		return JSONUtil.createObj();
	}

	/**
	 * 验证参数合法性
	 * @param param
	 */
	private void checkParam(JSONObject param) {
		if (StrUtil.isBlank(param.getStr("main_id"))) {
			throw new HtException("main_id不能为空~");
		}
	}
}
